HDU 1033 [Edge] 模拟 方向
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1033
题目大意:一张纸条,向上折(顺时针)或向下折(逆时针),侧视时,折叠线处视为90°。初始方向向右,每次10个单位描绘边缘。
题意巨坑,摆上潦草翻译:
对于被包装在小包裹里的产品来说,包含使用的方向的纸页是被折叠的直到它足够小是必要的。我们假定纸页是矩形的,而且只有折叠的线与它最初的短边平行。按这条线折叠的行为,可以有两个方向:朝着上表面或朝着下表面。两种情况下,矩形被折叠线分离的两个部分被整齐地放在一起,我们忽略任何厚度变化。
经过几次这样的折叠步骤我们可以再次展开这张纸看看它支撑这张纸的较长边所以它像是一个一维的雕刻,其实就是线段的偶联。如果我们沿着这条雕刻朝着一个固定方向,我们可以搞清楚哪里是顺时针折哪里是逆时针折的。给定这一样一个分类的序列,生成一个这张纸的最长边的描绘。(假定等距的地方转90度)
关键思想:只有四种走向,放在数组里。模拟
//方向控制,水题 #include <iostream> using namespace std; int main(){ string t; int x=300,y=420,dir=0; int d[4][2]={{10,0},{0,-10},{-10,0},{0,10}};//初始方向向右,数组存储为顺时针 while(cin>>t){ x=300,y=420,dir=0; cout<<"300 420 moveto"<<endl; cout<<(x+=d[dir][0])<<" "<<(y+=d[dir][1])<<" lineto"<<endl; for(int i=0;i<t.size();i++){ switch(t[i]){ case 'A':dir++;break; case 'V':dir--;break; defalut:break; } if(dir==4)dir=0;//循环 if(dir==-1)dir=3; cout<<(x+=d[dir][0])<<" "<<(y+=d[dir][1])<<" lineto"<<endl; } cout<<"stroke"<<endl<<"showpage"<<endl; } return 0; }
边完善自己边认识自己